package com.xc.round2Assessment.lab3;

import org.junit.jupiter.api.Test;

import java.util.concurrent.locks.LockSupport;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 谢忱
 * @version 1.0
 */
public class Methods {
    public static void main(String[] args) {

    }

    // 为什么一定要在外面声明呢..
    static Thread thread1 = null, thread2 = null;

    @Test
    public void concurrentOutputArray() throws InterruptedException {


        int[] arr1 = {1, 3, 5, 7, 9};
        int[] arr2 = {2, 4, 6, 8, 10};
        thread1 = new Thread(() -> {
            for (int num : arr1) {
                System.out.print(num + " ");
                LockSupport.unpark(thread2); // 唤醒另一个线程
                LockSupport.park(); // 阻塞当前线程
            }
        });
        thread2 = new Thread(() -> {
            for (int num : arr2) {
                System.out.print(num + " ");
                LockSupport.unpark(thread1); // 唤醒另一个线程
                LockSupport.park(); // 阻塞当前线程
            }
        });

        thread1.start();
        // 保证是 t1 锁住以后， t2 才执行
        Thread.sleep(50);
        thread2.start();

        /**
         * 如果不睡一下主线程的话, 两个线程几乎同时执行, 为了保证顺序, 可以将 thread2 的 run 方法循环内容修改为 :
         * LockSupport.park(); // 阻塞当前线程
         * System.out.print(num + " ");
         * LockSupport.unpark(thread1); // 唤醒另一个线程
         * 先阻塞自己, 再等待唤醒
         *
         * 或者就如同现在代码中写的一样, 睡一会, 保证 thread1 执行完再执行 thread2
         */
    }

    @Test
    public void judgeEmailAddress() {
        //Scanner scanner = new Scanner(System.in);
        //String email = scanner.next();
        // 不设置参数了， 默认 junit 不支持键盘输入
        String email = "2411564059@qq.com";
        // 如 QQ邮箱 : 2411564059@qq.com
        // 通用格式 : 登录名 + @xx.com
        // xx 可以是 sohu, sina, 163(网易) 或者 qq 等等
        Pattern pattern = Pattern.compile("^\\w+@\\w+\\.com$");
        Matcher matcher = pattern.matcher(email);
        if (matcher.find()) System.out.println("邮箱格式正确");
        else System.out.println("邮箱格式错误");
    }
}
